/**
 * @file clipdialog.h
 * @brief 裁剪过滤器对话框的头文件
 * @author Riccardo DI Maio
 * @version 1.0 24/04/19
 */

#ifndef CLIPDIALOG_H
#define CLIPDIALOG_H

// #include "core_lib_export.h"

#include <QDialog>

namespace Ui
{
class ClipDialog;
}

/**
 * 裁剪过滤器对话框。
 * 由于MainWindow无法直接访问ClipDialog的对象(例如xSlider, yDial)，
 * 因此使用自定义信号来发送并由MainWindow接收。
 */
class ClipDialog : public QDialog
{
    Q_OBJECT

  Q_SIGNALS:
    /**
     * 当x滑块移动时发出的信号
     */
    void xSliderMoved(int value);
    /**
     * 当y滑块移动时发出的信号
     */
    void ySliderMoved(int value);
    /**
     * 当z滑块移动时发出的信号
     */
    void zSliderMoved(int value);
    /**
     * 当x旋钮移动时发出的信号
     */
    void xDialMoved(int value);
    /**
     * 当y旋钮移动时发出的信号
     */
    void yDialMoved(int value);
    /**
     * 当z旋钮移动时发出的信号
     */
    void zDialMoved(int value);
    /**
     * 当点击确定按钮时发出的信号
     */
    void clipDialogRejected();
    /**
     * 当点击取消按钮时发出的信号
     */
    void clipDialogAccepted();

  public:
    explicit ClipDialog(QWidget *parent = nullptr);
    ~ClipDialog();

  private Q_SLOTS:
    /**
     * 处理来自x滑块的sliderMoved信号的槽函数
     */
    void on_xSlider_sliderMoved(int position);
    /**
     * 处理来自y滑块的sliderMoved信号的槽函数
     */
    void on_ySlider_sliderMoved(int position);
    /**
     * 处理来自z滑块的sliderMoved信号的槽函数
     */
    void on_zSlider_sliderMoved(int position);
    /**
     * 处理来自x旋钮的sliderMoved信号的槽函数
     */
    void on_xDial_sliderMoved(int position);
    /**
     * 处理来自y旋钮的sliderMoved信号的槽函数
     */
    void on_yDial_sliderMoved(int position);
    /**
     * 处理来自z旋钮的sliderMoved信号的槽函数
     */
    void on_zDial_sliderMoved(int position);
    /**
     * 处理确定按钮的槽函数
     */
    void on_buttonBox_accepted();
    /**
     * 处理取消按钮的槽函数
     */
    void on_buttonBox_rejected();

  private:
    Ui::ClipDialog *ui;
};

#endif // CLIPDIALOG_H